Файл: Domino2.txt

Дата: 10.04.2014

1: * Игра в домино.
2: * Версия 2. С графическим отображением фишек.
3: * Программа КОНЦЕПТ, 25.05.2011, www.gendoc.ru
4:
5: *** Графика ***
6:
7: *присвоить СТОРОНА_ФИШКИ 48 ДИАМЕТР_КРУЖКА 10 
8: присвоить СТОРОНА_ФИШКИ 36 ДИАМЕТР_КРУЖКА 8  
9:
10: вычислить * ДЛИННАЯ_СТОРОНА_ФИШКИ  [СТОРОНА_ФИШКИ] 2
11: вычислить / ПОЛОВИНА_СТОРОНЫ_ФИШКИ [СТОРОНА_ФИШКИ] 2
12: вычислить / ЧЕТВЕРТЬ_СТОРОНЫ_ФИШКИ [СТОРОНА_ФИШКИ] 4
13: вычислить - ТРИ_ЧЕТВЕРТИ_СТОРОНЫ_ФИШКИ [СТОРОНА_ФИШКИ] [ЧЕТВЕРТЬ_СТОРОНЫ_ФИШКИ]
14: вычислить / РАДИУС_КРУЖКА [ДИАМЕТР_КРУЖКА] 2
15: присвоить ЦВЕТ_ФИШКИ 8 ЦВЕТ_КОНТУРА 1 ЦВЕТ_КРУЖКА 15 ЦВЕТ_СТРЕЛКИ 15 ЦВЕТ_НАДПИСИ 1
16:
17: вычислить / КОЛБАСА_ЛЕВЫЙ_Х [$ШиринаОбластиГрафики] 2
18: вычислить / КОЛБАСА_ЛЕВЫЙ_У [$ВысотаОбластиГрафики] 2  
19: присвоить КОЛБАСА_ПРАВЫЙ_Х [КОЛБАСА_ЛЕВЫЙ_Х] КОЛБАСА_ПРАВЫЙ_У [КОЛБАСА_ЛЕВЫЙ_У]
20:
21: функция Рисовать_фишку фишка центр_х центр_у ориентация
22:   присвоить $ЦветЛинии [ЦВЕТ_КОНТУРА] $ТолщинаЛинии 1
23:   если [ориентация] == горизонтально
24:     Рисовать_половинку_фишки \
25:       (строка взять $результат [фишка] 1 ) \
26:       (вычислить - $результат [центр_х] [СТОРОНА_ФИШКИ] ) \
27:       (вычислить - $результат [центр_у] [ПОЛОВИНА_СТОРОНЫ_ФИШКИ] ) \
28:       [ориентация]
29:     Рисовать_половинку_фишки \
30:       (строка взять $результат [фишка] 2 ) \
31:       [центр_х] \
32:       (вычислить - $результат [центр_у] [ПОЛОВИНА_СТОРОНЫ_ФИШКИ] ) \
33:       [ориентация]
34:   иначе
35:     Рисовать_половинку_фишки \
36:       (строка взять $результат [фишка] 1 ) \
37:       (вычислить - $результат [центр_х] [ПОЛОВИНА_СТОРОНЫ_ФИШКИ] ) \
38:       (вычислить - $результат [центр_у] [СТОРОНА_ФИШКИ] ) \
39:       [ориентация]
40:     Рисовать_половинку_фишки \
41:       (строка взять $результат [фишка] 2 ) \
42:       (вычислить - $результат [центр_х] [ПОЛОВИНА_СТОРОНЫ_ФИШКИ] ) \
43:       [центр_у] \
44:       [ориентация]
45:   конец
46: возврат
47:
48: функция Рисовать_половинку_фишки число_точек х1 у1 ориентация
49:   присвоить $ЦветКисти [ЦВЕТ_ФИШКИ]
50:   вычислить + х2 [х1] [СТОРОНА_ФИШКИ]
51:   вычислить + у2 [у1] [СТОРОНА_ФИШКИ]
52:   рисовать прямоугольник [х1] [у1] [х2] [у2]
53: *  рисовать текстВПрямоугольнике [х1] [у1] [х2] [у2] [число_точек]
54:   если (множество и $результат [число_точек] 1;3;5 )
55:     Рисовать_кружок_фишки \
56:       (вычислить + $результат [х1] [ПОЛОВИНА_СТОРОНЫ_ФИШКИ] ) \
57:       (вычислить + $результат [у1] [ПОЛОВИНА_СТОРОНЫ_ФИШКИ] )  
58:   конец
59:   если (множество и $результат [число_точек] 2;3;4;5;6 )
60:     Рисовать_кружок_фишки \
61:       (вычислить + $результат [х1] [ЧЕТВЕРТЬ_СТОРОНЫ_ФИШКИ] ) \
62:       (вычислить + $результат [у1] [ЧЕТВЕРТЬ_СТОРОНЫ_ФИШКИ] )  
63:     Рисовать_кружок_фишки \
64:       (вычислить + $результат [х1] [ТРИ_ЧЕТВЕРТИ_СТОРОНЫ_ФИШКИ] ) \
65:       (вычислить + $результат [у1] [ТРИ_ЧЕТВЕРТИ_СТОРОНЫ_ФИШКИ] )  
66:   конец
67:   если (множество и $результат [число_точек] 4;5;6 )
68:     Рисовать_кружок_фишки \
69:       (вычислить + $результат [х1] [ТРИ_ЧЕТВЕРТИ_СТОРОНЫ_ФИШКИ] ) \
70:       (вычислить + $результат [у1] [ЧЕТВЕРТЬ_СТОРОНЫ_ФИШКИ] )  
71:     Рисовать_кружок_фишки \
72:       (вычислить + $результат [х1] [ЧЕТВЕРТЬ_СТОРОНЫ_ФИШКИ] ) \
73:       (вычислить + $результат [у1] [ТРИ_ЧЕТВЕРТИ_СТОРОНЫ_ФИШКИ] )  
74:   конец
75:   если [число_точек] == 6
76:     если [ориентация] == горизонтально
77:       Рисовать_кружок_фишки \
78:         (вычислить + $результат [х1] [ПОЛОВИНА_СТОРОНЫ_ФИШКИ] ) \
79:         (вычислить + $результат [у1] [ЧЕТВЕРТЬ_СТОРОНЫ_ФИШКИ] )  
80:       Рисовать_кружок_фишки \
81:         (вычислить + $результат [х1] [ПОЛОВИНА_СТОРОНЫ_ФИШКИ] ) \
82:         (вычислить + $результат [у1] [ТРИ_ЧЕТВЕРТИ_СТОРОНЫ_ФИШКИ] )
83:     иначе
84:       Рисовать_кружок_фишки \
85:         (вычислить + $результат [х1] [ЧЕТВЕРТЬ_СТОРОНЫ_ФИШКИ] ) \
86:         (вычислить + $результат [у1] [ПОЛОВИНА_СТОРОНЫ_ФИШКИ] )  
87:       Рисовать_кружок_фишки \
88:         (вычислить + $результат [х1] [ТРИ_ЧЕТВЕРТИ_СТОРОНЫ_ФИШКИ] ) \
89:         (вычислить + $результат [у1] [ПОЛОВИНА_СТОРОНЫ_ФИШКИ] )
90:     конец
91:   конец
92: возврат
93:
94: функция Рисовать_кружок_фишки х у
95:   присвоить $ЦветКисти [ЦВЕТ_КРУЖКА]
96:   рисовать круг \
97:     (вычислить - $результат [х] [РАДИУС_КРУЖКА] ) \
98:     (вычислить - $результат [у] [РАДИУС_КРУЖКА] ) \
99:     (вычислить + $результат [х] [РАДИУС_КРУЖКА] ) \
100:     (вычислить + $результат [у] [РАДИУС_КРУЖКА] )  
101: возврат
102:
103: функция Рисовать_стрелку_переноса х у направление
104:   память локальный у1 у2 х1
105:
106:   вычислить - у1 [у] [ПОЛОВИНА_СТОРОНЫ_ФИШКИ]
107:   вычислить + у2 [у] [ПОЛОВИНА_СТОРОНЫ_ФИШКИ]
108:
109:   если [направление] == вправо
110:     вычислить + х1 [х] [ПОЛОВИНА_СТОРОНЫ_ФИШКИ]
111:   иначе
112:     вычислить - х1 [х] [ПОЛОВИНА_СТОРОНЫ_ФИШКИ]
113:   конец
114:
115:   присвоить $ЦветКисти [ЦВЕТ_СТРЕЛКИ] $ЦветЛинии [ЦВЕТ_СТРЕЛКИ]
116:   рисовать треугольник [х] [у1] [х] [у2] [х1] [у]
117: возврат
118:
119: функция Поставь_фишку_в_колбасу фишка край_колбасы
120:   память локальный сдвиг_центр сдвиг_фишка ориентация у х1 у1
121:
122:   если (множество и $результат [фишка] 00;11;22;33;44;55;66 )
123:     присвоить ориентация вертикально сдвиг_центр [ПОЛОВИНА_СТОРОНЫ_ФИШКИ] сдвиг_фишка [СТОРОНА_ФИШКИ]
124:   иначе
125:     присвоить ориентация горизонтально сдвиг_центр [СТОРОНА_ФИШКИ] сдвиг_фишка [ДЛИННАЯ_СТОРОНА_ФИШКИ]  
126:   конец
127:
128:   если [край_колбасы] == справа
129:     * Перенос колбасы на другой уровень, если не помещается в одну линию
130:     если [КОЛБАСА_ПРАВЫЙ_Х] >= (вычислить - $результат [$ШиринаОбластиГрафики] [ДЛИННАЯ_СТОРОНА_ФИШКИ] )
131:       Рисовать_стрелку_переноса [КОЛБАСА_ПРАВЫЙ_Х] [КОЛБАСА_ПРАВЫЙ_У] вправо
132:       вычислить / КОЛБАСА_ПРАВЫЙ_Х [$ШиринаОбластиГрафики] 2
133:       вычислить - КОЛБАСА_ПРАВЫЙ_У $ [ДЛИННАЯ_СТОРОНА_ФИШКИ] [ПОЛОВИНА_СТОРОНЫ_ФИШКИ]
134:       Рисовать_стрелку_переноса (вычислить - $результат [КОЛБАСА_ПРАВЫЙ_Х] [ПОЛОВИНА_СТОРОНЫ_ФИШКИ] ) [КОЛБАСА_ПРАВЫЙ_У] вправо
135:     конец
136:     вычислить + сдвиг_центр $ [КОЛБАСА_ПРАВЫЙ_Х]
137:     вычислить + КОЛБАСА_ПРАВЫЙ_Х $ [сдвиг_фишка]
138:     присвоить у [КОЛБАСА_ПРАВЫЙ_У]
139:   иначе
140:     * Перенос колбасы на другой уровень, если не помещается в одну линию
141:     если [КОЛБАСА_ЛЕВЫЙ_Х] <= [ДЛИННАЯ_СТОРОНА_ФИШКИ]
142:       Рисовать_стрелку_переноса [КОЛБАСА_ЛЕВЫЙ_Х] [КОЛБАСА_ЛЕВЫЙ_У] влево
143:       вычислить / КОЛБАСА_ЛЕВЫЙ_Х [$ШиринаОбластиГрафики] 2
144:       вычислить + КОЛБАСА_ЛЕВЫЙ_У $ [ДЛИННАЯ_СТОРОНА_ФИШКИ] [ПОЛОВИНА_СТОРОНЫ_ФИШКИ]  
145:       Рисовать_стрелку_переноса (вычислить + $результат [КОЛБАСА_ЛЕВЫЙ_Х] [ПОЛОВИНА_СТОРОНЫ_ФИШКИ] ) [КОЛБАСА_ЛЕВЫЙ_У] влево
146:     конец
147:     вычислить - сдвиг_центр [КОЛБАСА_ЛЕВЫЙ_Х] [сдвиг_центр]
148:     вычислить - КОЛБАСА_ЛЕВЫЙ_Х $ [сдвиг_фишка]
149:     присвоить у [КОЛБАСА_ЛЕВЫЙ_У]
150:   конец
151:
152:   Рисовать_фишку [фишка] [сдвиг_центр] [у] [ориентация]
153: возврат
154:
155: функция Рисовать_фишки_на_руке х у фишки_на_руке
156:   для [фишки_на_руке]
157:     Рисовать_фишку [$ОбъектЦикла] [х] [у] вертикально
158:     увеличить х [СТОРОНА_ФИШКИ]    
159:   следующий
160:   присвоить $ЦветКисти 16 $ЦветЛинии 16
161:   рисовать прямоугольник \
162:     (вычислить - $результат [х] [ПОЛОВИНА_СТОРОНЫ_ФИШКИ] ) \
163:     (вычислить - $результат [у] [СТОРОНА_ФИШКИ] ) \
164:     [$ШиринаОбластиГрафики] \
165:     (вычислить + $результат [у] [СТОРОНА_ФИШКИ] )
166: возврат
167:
168: функция Рисовать_фишки_компьютера
169:   присвоить $ЦветТекста [ЦВЕТ_НАДПИСИ] $ЦветКисти 16
170:   рисовать текст [ПОЛОВИНА_СТОРОНЫ_ФИШКИ] (вычислить - $результат [СТОРОНА_ФИШКИ] 20 ) Компьютер
171:   Рисовать_фишки_на_руке [СТОРОНА_ФИШКИ] [ДЛИННАЯ_СТОРОНА_ФИШКИ] [РУКА_КОМПЬЮТЕРА]
172: возврат
173:
174: функция Рисовать_фишки_игрока
175:   память локальный у
176:   вычислить - у [$ВысотаОбластиГрафики] [ДЛИННАЯ_СТОРОНА_ФИШКИ] [СТОРОНА_ФИШКИ]  
177:   присвоить $ЦветТекста [ЦВЕТ_НАДПИСИ] $ЦветКисти 16
178:   рисовать текст [ПОЛОВИНА_СТОРОНЫ_ФИШКИ] (вычислить - $результат [у]  [СТОРОНА_ФИШКИ] 20 ) Игрок
179:   Рисовать_фишки_на_руке [СТОРОНА_ФИШКИ] [у] [РУКА_ИГРОКА]
180: возврат
181:
182: *** Основные функции
183:
184: функция Протокол текст
185:   >[текст] 
186: возврат
187:
188: функция ПротоколN текст
189:   для [текст]  
190:     >[$ОбъектЦикла]
191:   следующий  
192: возврат
193:
194: * Обозначения:
195: * кл - колбаса, левый край
196: * кп - колбаса, правый край
197: * фл - фишка, левый край
198: * фп - фишка, правый край
199:
200: функция Ставь_фишку фишка_проверенная
201:   память локальный варианты вариант кл кп фл фп ответ
202:
203:   строка взять кл [КОЛБАСА] 1
204:   строка взять кп [КОЛБАСА] (строка размер $результат [КОЛБАСА] )
205:   строка взять фл [фишка_проверенная] 1
206:   строка взять фп [фишка_проверенная] 2
207:
208:   Ход_допустимый? варианты [фишка_проверенная]
209:
210: * Приставить фишку к колбасе
211:   если [КОЛБАСА] == {}
212:     список сцепить КОЛБАСА [КОЛБАСА] [фишка_проверенная]      
213:     Поставь_фишку_в_колбасу [фишка_проверенная] справа
214:   иначе
215:     список голова вариант [варианты]
216:     если  [КТО_ХОДИТ] == игрок
217:       если (список размер $результат [варианты] ) == 2
218:         если (вычислить и $результат (вычислить != $результат [кл] [кп] ) (вычислить != $результат [фл] [фп] ) )
219:           ввести меню1 ответ "Куда ставить фишку [фишка_проверенная]?" слева;справа
220:           если [ответ] == слева
221:             если [кл] == [фл]
222:               присвоить вариант лл
223:             иначе
224:               присвоить вариант лп
225:             конец
226:           иначе
227:             если [кп] == [фл]
228:               присвоить вариант пл
229:             иначе
230:               присвоить вариант пп
231:             конец
232:           конец  
233:         конец
234:       конец
235:     конец
236:
237:     выбрать [вариант]
238:     вариант лл
239:       список сцепить КОЛБАСА "[фп][фл][КОЛБАСА]
240:       Поставь_фишку_в_колбасу "[фп][фл]" слева
241:     вариант лп
242:       список сцепить КОЛБАСА "[фл][фп][КОЛБАСА]
243:       Поставь_фишку_в_колбасу "[фл][фп]" слева
244:     вариант пл
245:       список сцепить КОЛБАСА [КОЛБАСА] "[фл][фп]"
246:       Поставь_фишку_в_колбасу "[фл][фп]" справа
247:     вариант пп
248:       список сцепить КОЛБАСА [КОЛБАСА] "[фп][фл]"
249:       Поставь_фишку_в_колбасу "[фп][фл]" справа
250:     конецВыбора
251:   конец
252:
253: * Убрать фишку с руки
254:   если [КТО_ХОДИТ] == компьютер
255:     множество разность РУКА_КОМПЬЮТЕРА [РУКА_КОМПЬЮТЕРА] [фишка_проверенная]
256:     Протокол "Комп: [фишка_проверенная] [РУКА_КОМПЬЮТЕРА]"
257:   иначе
258:     множество разность РУКА_ИГРОКА [РУКА_ИГРОКА] [фишка_проверенная]
259:     Протокол "Игрок: [фишка_проверенная] [РУКА_ИГРОКА]"
260:   конец
261: возврат
262:
263: функция Ход_допустимый? варианты_установки фишка_кандидат
264:   память локальный кл кп фл фп
265:   присвоить [варианты_установки] {}
266:
267:   если [КОЛБАСА] == {}
268:     присвоить [варианты_установки] лл;лп;пл;пп
269:   иначе
270:     строка взять кл [КОЛБАСА] 1
271:     строка взять кп [КОЛБАСА] (строка размер $результат [КОЛБАСА] )
272:     строка взять фл [фишка_кандидат] 1
273:     строка взять фп [фишка_кандидат] 2
274:     
275:     если [кл] == [фл]
276:       множество или [варианты_установки] [[варианты_установки]] лл
277:     конец
278:     если [кл] == [фп]
279:       множество или [варианты_установки] [[варианты_установки]] лп
280:     конец
281:     если [кп] == [фл]
282:       множество или [варианты_установки] [[варианты_установки]] пл
283:     конец
284:     если [кп] == [фп]
285:       множество или [варианты_установки] [[варианты_установки]] пп
286:     конец
287:   конец
288: возврат
289:
290: функция Есть_чем_ходить? варианты_ходов на_руке
291:   память локальный варианты_установки_фишки
292:   присвоить [варианты_ходов] {}
293:
294:   если [КОЛБАСА]
295:     для [на_руке]
296:       Ход_допустимый? варианты_установки_фишки [$ОбъектЦикла]
297:       если [варианты_установки_фишки]
298:         множество или [варианты_ходов] [[варианты_ходов]] [$ОбъектЦикла]
299:       конец
300:     следующий
301:   иначе
302:     присвоить [варианты_ходов] [на_руке]    
303:   конец
304: возврат
305:
306: функция Иди_на_базар рука
307:   память локальный кол фишка варианты взято_с_базара
308:
309:   присвоить кол 0  
310:   присвоить взято_с_базара {}
311:   для [КОЛОДА]
312:     вычислить + кол [кол] 1
313:     список выбратьСлучайный фишка [КОЛОДА]
314:     множество разность КОЛОДА [КОЛОДА] [фишка]
315:     множество или [рука] [[рука]] [фишка]  
316:     список сцепить взято_с_базара [взято_с_базара] [фишка]
317:
318:     Ход_допустимый? варианты [фишка]
319:     если [варианты]
320:       присвоить $СписокЦикла {}
321:     конец
322:   следующий
323:
324:   если [кол] > 0
325:     показать сообщение "[рука] сходил на базар [кол] раз!"
326:     Протокол "[рука] сходил на базар [кол] раз! [взято_с_базара]"
327:   конец
328: возврат
329:
330: функция Ход_компьютера
331:   память локальный фишка варианты дупель_найден фл фп
332:   присвоить КТО_ХОДИТ компьютер
333:
334:   Есть_чем_ходить? варианты [РУКА_КОМПЬЮТЕРА]
335: *  показать сообщение "Варианты компьютера: [варианты] Колбаса: [КОЛБАСА] На руке: [РУКА_КОМПЬЮТЕРА]"
336:   если [варианты] == {}
337:     Иди_на_базар РУКА_КОМПЬЮТЕРА
338:   конец  
339:
340:   если [РУКА_КОМПЬЮТЕРА]
341:     Есть_чем_ходить? варианты [РУКА_КОМПЬЮТЕРА]
342:     если [варианты]
343:
344:         * Здесь логика выбора оптимального хода компьютером !!!
345:       список инвертировать варианты [варианты]
346:       присвоить дупель_найден ''
347:       для [варианты]
348:         строка взять фл [$ОбъектЦикла] 1
349:         строка взять фп [$ОбъектЦикла] 2
350:         если [фл] == [фп]
351:           присвоить дупель_найден [$ОбъектЦикла]
352:           присвоить $СписокЦикла {}
353:         конец
354:       следующий
355:       если [дупель_найден]
356:         присвоить фишка [дупель_найден]
357:       иначе
358:         список взять фишка [варианты] 1
359:       конец
360:
361:       Ставь_фишку [фишка]
362:     иначе
363:       показать сообщение "Компьютер катом."
364:       Протокол "Компьютер катом. [РУКА_КОМПЬЮТЕРА] [КОЛОДА]"
365:     конец
366:   конец
367:
368:   Рисовать_фишки_компьютера
369:   Игра_окончена?
370: возврат
371:
372: функция Ход_игрока
373:   память локальный фишка варианты рука_с_подсказкой вариант
374:   присвоить КТО_ХОДИТ игрок
375:
376:   Рисовать_фишки_игрока
377:
378:   Есть_чем_ходить? варианты [РУКА_ИГРОКА]
379: *  показать сообщение "Варианты игрока: [варианты] Колбаса: [КОЛБАСА] На руке: [РУКА_ИГРОКА]"
380:   если [варианты] == {}
381:     Иди_на_базар РУКА_ИГРОКА
382:     Рисовать_фишки_игрока
383:   конец  
384:
385:   если [РУКА_ИГРОКА]
386:     Есть_чем_ходить? варианты [РУКА_ИГРОКА]
387:     если [варианты]
388:       присвоить рука_с_подсказкой {}
389:       для [РУКА_ИГРОКА]
390:         множество и вариант [$ОбъектЦикла] [варианты]
391:         если [вариант]
392:           список сцепить рука_с_подсказкой [рука_с_подсказкой] ">[$ОбъектЦикла]"
393:         иначе
394:           список сцепить рука_с_подсказкой [рука_с_подсказкой] " [$ОбъектЦикла]"
395:         конец
396:       следующий
397:
398:       для 1
399:         ввести меню1 фишка '' [рука_с_подсказкой]
400:
401:         строка удалить фишка [фишка] 1 1
402:
403:         Ход_допустимый? варианты [фишка]
404:         если [варианты]
405:           Ставь_фишку [фишка]
406:         иначе
407:           показать сообщение "Недопустимый ход [фишка]!"
408:           присвоить $СписокЦикла 1
409:         конец
410:       следующий
411:     иначе
412:       показать сообщение "Игрок катом."
413:       Протокол "Игрок катом. [РУКА_ИГРОКА] [КОЛОДА]"
414:     конец
415:   конец
416:
417:   Рисовать_фишки_игрока
418:   Игра_окончена?
419: возврат
420:
421: функция Игра_окончена?
422:   память локальный игра_окончена очки_комп очки_игрок победитель
423:   память локальный кл кп фл фп длина кол
424:   присвоить игра_окончена нет  
425:
426:   если [КТО_ХОДИТ] == компьютер
427:     если [РУКА_КОМПЬЮТЕРА] == {}
428:       присвоить игра_окончена да  
429:     конец
430:   иначе
431:     если [РУКА_ИГРОКА] == {}
432:       присвоить игра_окончена да  
433:     конец      
434:   конец
435:
436: * или обоим нечем ходить и на базаре нет допустимых фишек (РЫБА)
437:   строка размер длина [КОЛБАСА]
438:   строка взять кл [КОЛБАСА] 1
439:   строка взять кп [КОЛБАСА] [длина]
440:   если [кл] == [кп]
441:     присвоить кол 0
442:     для [КОЛБАСА]
443:       строка взять фл [$ОбъектЦикла] 1
444:       строка взять фп [$ОбъектЦикла] 2
445:       если [фл] == [кл]
446:         вычислить + кол [кол] 1
447:       конец
448:       если [фп] == [кп]
449:         вычислить + кол [кол] 1
450:       конец
451:     следующий
452:     если [кол] = 8
453:       присвоить игра_окончена да  
454:       показать сообщение 'Рыба!!!'
455:     конец
456:   конец
457:   
458:   если [игра_окончена] == да
459:     Подсчет_очков_на_руке [РУКА_КОМПЬЮТЕРА]
460:     присвоить очки_комп [Подсчет_очков_на_руке]
461:
462:     Подсчет_очков_на_руке [РУКА_ИГРОКА]
463:     присвоить очки_игрок [Подсчет_очков_на_руке]
464:
465:     >
466:     >Результат
467:     >  Компьютер: [очки_комп] - Игрок: [очки_игрок]
468:     >  Колбаса: [КОЛБАСА]
469:     >  Компьютер: [РУКА_КОМПЬЮТЕРА]
470:     >  Игрок: [РУКА_ИГРОКА]
471:     >  Колода: [КОЛОДА]
472:
473:     присвоить победитель ничья
474:     если [очки_комп] < [очки_игрок]
475:       присвоить победитель компьютер
476:       показать сообщение "Я выиграл :)!"
477:     конец
478:     если [очки_комп] > [очки_игрок]
479:       присвоить победитель игрок
480:       показать сообщение "Вы выиграли :(!"
481:     конец
482:     если [очки_комп] = [очки_игрок]
483:       показать сообщение "Боевая ничья!"
484:     конец
485:
486:     стоп
487:   конец
488: возврат
489:
490: функция Подсчет_очков_на_руке на_руке
491:   память локальный фл фп
492:   присвоить Подсчет_очков_на_руке 0
493:
494:   если [на_руке] == 00
495:     присвоить Подсчет_очков_на_руке 10
496:   иначе
497:     для фишка [на_руке]
498:       строка взять фл [фишка] 1
499:       строка взять фп [фишка] 2
500:       присвоить Подсчет_очков_на_руке (вычислить + $результат [Подсчет_очков_на_руке] [фл] [фп] )      
501:     следующий
502:   конец
503: возврат
504:
505: функция Генерация_колоды
506:   память локальный x y
507:
508:   присвоить КОЛОДА {}
509:   список сгенерить ТОЧКИ 0 6
510:   для x [ТОЧКИ]
511:     для y [ТОЧКИ]
512:       если [x] <= [y]
513:         множество или КОЛОДА [КОЛОДА] "[x][y]"
514:       конец
515:     следующий
516:   следующий
517: возврат
518:
519: функция Сдача_фишек набор_фишек
520:   память локальный рука фишка
521:
522:   присвоить рука {}
523:   для 1;2;3;4;5;6;7
524:     список выбратьСлучайный фишка [КОЛОДА]
525:     множество разность КОЛОДА [КОЛОДА] [фишка]
526:     множество или рука [рука] [фишка]
527:   следующий
528:   присвоить [набор_фишек] [рука]
529: возврат
530:
531: *** Начало основного кода
532:
533: присвоить КОЛБАСА {}
534:
535: Генерация_колоды
536: Сдача_фишек РУКА_КОМПЬЮТЕРА
537: Сдача_фишек РУКА_ИГРОКА
538:
539: ПротоколN "Протокол игры в домино;;Начальная раздача"
540: Протокол  "   Компьютер:  [РУКА_КОМПЬЮТЕРА]"
541: Протокол  "   Игрок: [РУКА_ИГРОКА]"
542:
543: присвоить ХОД 1
544: пока [ХОД]
545:   Протокол ''
546:   Протокол "ход N [ХОД]"
547:   Протокол "Колбаса: [КОЛБАСА]"
548:  
549:   Ход_компьютера
550:   Ход_игрока
551:
552:   вычислить + ХОД [ХОД] 1  
553: цикл